// src/users/entities/user.entity.ts
import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  ManyToMany,
  JoinTable,
  JoinColumn,
  BeforeInsert,
  ManyToOne,
} from 'typeorm';
import { Role } from '../../role/entities/role.entity';
import { OneToOne } from 'typeorm';
import { v4 as uuidv4 } from 'uuid';

@Entity('user')
export class User {
  @PrimaryGeneratedColumn('uuid')
  id: string = uuidv4();

  // 用户名，唯一且不可为空
  @Column({ length: 100, unique: true })
  username: string;

  // 用户的邮箱，唯一且不可为空
  @Column({ length: 100, unique: true })
  email: string;

  // 用户的密码哈希值，存储加密后的密码
  @Column()
  password: string;

  // 用户的姓名
  @Column({ length: 100, nullable: true })
  full_name: string;

  // 用户的手机号码，唯一且可为空
  @Column({ length: 20, nullable: true })
  phone_number: string;

  // 用户头像的URL
  @Column({ length: 255, nullable: true })
  avatar_url: string;

  // 用户的性别，默认为男性
  @Column({ type: 'enum', enum: ['male', 'female', 'other'], default: 'male' })
  gender: string;

  // 用户的出生日期
  @Column({ type: 'date', nullable: true })
  birth_date: Date;

  // 用户的居住地址
  @Column({ length: 255, nullable: true })
  address: string;

  // 用户的职位或职业
  @Column({ length: 100, nullable: true })
  occupation: string;

  // 用户的社交媒体链接（例如：Twitter, LinkedIn）
  @Column({ length: 255, nullable: true })
  social_media_links: string;

  // 用户是否已经验证邮箱，默认未验证
  @Column({ default: false })
  is_email_verified: boolean;

  // 用户是否已启用两步验证，默认未启用
  @Column({ default: false })
  is_two_factor_enabled: boolean;

  // 用户是否是管理员，默认不是
  @Column({ default: false })
  is_admin: boolean;

  // 用户账户是否被禁用
  @Column({ default: false })
  is_disabled: boolean;

  // 用户是否已删除（逻辑删除）
  @Column({ default: false })
  is_deleted: boolean;

  // 用户最后登录的时间
  @Column({ type: 'timestamp', nullable: true })
  last_login: Date;

  // 用户的最后一次密码更新
  @Column({ type: 'timestamp', nullable: true })
  last_password_change: Date;

  // 用户的语言设置，默认是英语
  @Column({ length: 20, default: 'zh' })
  language: string;

  // 用户的时区，默认是 UTC
  @Column({ length: 50, default: 'UTC' })
  timezone: string;

  // 用户是否接收电子邮件通知，默认接收
  @Column({ default: true })
  email_notifications_enabled: boolean;

  // 用户的账户创建时间
  @CreateDateColumn()
  created_at: Date;

  // 用户信息更新时间
  @UpdateDateColumn()
  updated_at: Date;

  // 用户账户是否处于活动状态（是否禁用）
  @Column({ default: true })
  is_active: boolean;

  // 用户的最后一次IP地址
  @Column({ length: 50, nullable: true })
  last_ip: string;

  // 用户账户的登录失败次数
  @Column({ default: 0 })
  failed_login_attempts: number;

  // 用户账户锁定时间，默认不锁定
  @Column({ type: 'timestamp', nullable: true })
  account_locked_until: Date;

  // 用户的注册渠道（例如：网站、移动应用）
  @Column({ length: 50, nullable: true })
  registration_channel: string;

  // 用户关联的角色，一对一关系
  @ManyToOne(() => Role, (role) => role.users, {
    nullable: true,
    cascade: false,
  })
  @JoinColumn({ name: 'role_id' }) // 外键字段
  role: Role;

  // 用户的国籍
  @Column({ length: 100, nullable: true })
  nationality: string;

  // 用户是否同意隐私政策，默认同意
  @Column({ default: false })
  has_accepted_privacy_policy: boolean;

  // 用户的最后修改人ID
  @Column({ type: 'int', nullable: true })
  updated_by: number;

  // 用户注册的设备类型
  @Column({ length: 50, nullable: true })
  device_type: string;

  // 用户是否需要管理员审核，默认不需要
  @Column({ default: false })
  needs_admin_approval: boolean;

  // 用户的详细地址，支持多级地址
  @Column({ length: 255, nullable: true })
  detailed_address: string;

  // 用户的访问权限标记
  @Column({ length: 50, nullable: true })
  access_level: string;

  // 用户账户的最后一次密码错误时间
  @Column({ type: 'timestamp', nullable: true })
  last_failed_password_attempt: Date;

  // 用户的账户状态（例如：激活、冻结等）
  @Column({ length: 50, default: 'active' })
  account_status: string;

  // 用户的密码过期时间
  @Column({ type: 'timestamp', nullable: true })
  password_expiration: Date;

  // 用户账户的权限标记，默认是普通权限
  @Column({ length: 50, default: 'basic' })
  permission_level: string;

  // 用户是否已设置安全问题，默认未设置
  @Column({ default: false })
  is_security_question_set: boolean;

  // 用户的安全问题答案
  @Column({ length: 255, nullable: true })
  security_answer: string;

  // 用户是否启用推送通知，默认启用
  @Column({ default: true })
  is_push_notification_enabled: boolean;

  // 用户的账户过期时间，默认不设置
  @Column({ type: 'timestamp', nullable: true })
  account_expiration: Date;

  // 用户的上次操作IP地址
  @Column({ length: 50, nullable: true })
  last_action_ip: string;

  // 用户的所在城市
  @Column({ length: 100, nullable: true })
  city: string;

  // 用户的上次活动时间
  @Column({ type: 'timestamp', nullable: true })
  last_activity_time: Date;

  // 用户的会员等级
  @Column({ length: 50, nullable: true })
  membership_level: string;

  // 用户的账户余额
  @Column({ type: 'decimal', precision: 10, scale: 2, default: 0 })
  account_balance: number;
}
